﻿using System.Data;

namespace dados
{
    public class Categoria : FrameworkBase
    {
        string sSqlCondicao = string.Empty;
        string sSql = string.Empty;

        public DataTable Pesquisar()
        {
            return Pesquisar(0);
        }

        public DataTable Pesquisar(CWCategoria cwCategoria)
        {
            return this.Pesquisar(cwCategoria, false);
        }

        public DataTable Pesquisar(CWCategoria cwCategoria, bool blMostrarHierarquia)
        {
            sSqlCondicao = string.Empty;

            if (blMostrarHierarquia)
            {
                sSql = @" Select CAT.CODIGO, 
                        if(CATEGORIA_PAI is null, CAT.Descricao, CONCAT((select C1.Descricao from CATEGORIA C1 where C1.Codigo = CAT.Categoria_pai),' -> ',CAT.Descricao)) as DESCRICAO,
                        CAT.ORDEM,
                        CAT.CATEGORIA_PAI,
                        CAT.ATIVO,
                        CAT.LINK
                        from CATEGORIA CAT ";
            }
            else
            {
                sSql = @"select * 
                        from Categoria CAT ";
            }

            if (!string.IsNullOrEmpty(cwCategoria.Codigo.ToString()))
            {
                if (cwCategoria.Codigo > 0)
                    sSqlCondicao += " AND CAT.Codigo = " + cwCategoria.Codigo;
            }

            if (!string.IsNullOrEmpty(cwCategoria.Descricao))
            {
                sSqlCondicao += " AND CAT.Descricao like '%" + cwCategoria.Descricao + "%'";
            }

            if (sSqlCondicao.Length > 0)
                sSql += " where " + sSqlCondicao.Substring(5);

            sSql += " order by CAT.CATEGORIA_PAI, CAT.ORDEM";

            DataTable dtCategoria = ExecutarQuery(sSql);

            return dtCategoria;
        }

        public DataTable Pesquisar(long nCodigo)
        {
            sSqlCondicao = string.Empty;

            sSql = @"select * 
                     from Categoria ";

            if (nCodigo > 0)
            {
                sSqlCondicao += " AND Codigo = " + nCodigo;
            }

            if (sSqlCondicao.Length > 0)
                sSql += " where " + sSqlCondicao.Substring(5);

            DataTable dtCategoria = ExecutarQuery(sSql);

            return dtCategoria;
        }

        public void Salvar(CWCategoria cwCategoria)
        {

            if (cwCategoria.Codigo > 0)
            {
                sSql = "update Categoria set " +
                    " DESCRICAO = '" + cwCategoria.Descricao + "'," +
                    " ORDEM = " + cwCategoria.Ordem + ",";
                if (cwCategoria.CategoriaPai == 0)
                    sSql += " CATEGORIA_PAI = NULL,";
                else
                    sSql += " CATEGORIA_PAI = " + cwCategoria.CategoriaPai + ",";

                sSql += " ATIVO = '" + cwCategoria.Ativo + "'" + ","; 
                sSql += " LINK = '" + cwCategoria.Link + "' where Codigo = " + cwCategoria.Codigo;
            }
            else
            {
                sSql = "insert into Categoria (DESCRICAO, ORDEM, CATEGORIA_PAI, ATIVO, LINK) values (" +
                    " '" + cwCategoria.Descricao + "'," +
                    " " + cwCategoria.Ordem + ",";
                if (cwCategoria.CategoriaPai == 0)
                    sSql += " NULL,";
                else
                    sSql += " " + cwCategoria.CategoriaPai + ",";

                sSql += " '" + cwCategoria.Ativo + "',";
                sSql += " '" + cwCategoria.Link + "')";
            }

            Executar(sSql);


        }

        public void Excluir(string sCodigo)
        {
            sSql = "delete from  Categoria where Codigo = " + sCodigo;
            Executar(sSql);
        }
    }


}

